﻿using EncomiendaMVC.Models;
using EncomiendaMVC.Models.Binders;
using Entidades;
using LogicaNegocio;
using Microsoft.Security.Application;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace EncomiendaMVC.Controllers
{
    [Authorize()]
    public class ContratoController : Controller
    {
        //
        // GET: /Contrato/

        //[OutputCache(Duration = 120, VaryByParam = "lista")]    
        public ActionResult Index(int page = 1, int cantRegxPag = 3)
        {
            var lista = new LNContrato().ContratoListarPag(page, cantRegxPag);
            ViewBag.TotalVirtual =
                (lista.Count > 0) ?
                lista[0].Total
                :
                0;
            return View(lista);
            //return View();
        }


        ////[OutputCache(Duration = 360, VaryByParam = "none")]
        //public ActionResult Index()
        //{
        //    var lista = new LNContrato().ContratoListarPag(1,3);
        //    ViewBag.TotalVirtual =
        //        (lista.Count > 0)? lista[0].Total : 0;
        //    return View(lista);
        //}

        //[HttpPost]
        //public ActionResult Index(
        //    int pagina = 1, int cantRegxPag = 3)
        //{
        //    var lista = new LNContrato().ContratoListarPag(pagina, cantRegxPag);
        //    ViewBag.TotalVirtual = lista.Count > 0? lista[0].Total : 0;
        //    return View(lista);
        //}

        [Authorize(Roles = "Administrador")]
        public ActionResult Create(string Cliente)
        {
            if (Cliente != null)
            { ViewBag.DatoCliente = Cliente; }
            else
            {
                ViewBag.DatoCliente = null;

            }

            var lista = Parametro(ENUMTabla.Ruta.ToString());
            ViewBag.Ruta = new SelectList(lista, "Codigo", "Nombre");
            //ViewBag.ListaProfesores = new SelectList(lista, "IdProfesor", "Nombres");
            //ViewBag.Ruta = null;

            var listaAerolinea = Parametro(ENUMTabla.Aeronilinea.ToString());
            ViewBag.Aerolinea = new SelectList(listaAerolinea, "Codigo", "Nombre");
            //ViewBag.Aerolinea = null;

            var listaTipoEntrega = Parametro(ENUMTabla.TipoEntrega.ToString());
            ViewBag.TipoEntrega = new SelectList(listaTipoEntrega, "Codigo", "Nombre");
            //ViewBag.TipoEntrega = null;

            var listaDatoMaletas = Parametro(ENUMTabla.DatosMaleta.ToString());
            ViewBag.DatoMaletas = new SelectList(listaDatoMaletas, "Codigo", "Nombre");
            //ViewBag.DatoMaletas = null;

            var listaEstado = Parametro(ENUMTabla.Estado.ToString());
            ViewBag.Estado = new SelectList(listaEstado, "Codigo", "Nombre");


            return View();
        }

        [HttpPost]
        public ActionResult Create([ModelBinder(typeof(ContratoBinder))] ENContrato contrato)
        //public ActionResult Create(FormCollection colleccion)
        {
            //ENContrato contrato = new ENContrato();
            //correo.IdCorreo = Convert.ToInt32(colleccion["idcorreo"]);
            //contrato.Cliente_ID = Convert.ToInt32(Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Cliente_ID"])));
            //contrato.Ruta = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Ruta"])));
            //contrato.Aerolinea = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Aerolinea"])));
            //contrato.FechaSalida = Convert.ToDateTime(colleccion["FechaSalida"]);
            //contrato.FechaLlegada = Convert.ToDateTime(colleccion["FechaLlegada"]);
            //contrato.Vuelo = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Vuelo"])));
            //contrato.NumeroMaletas = Convert.ToInt32(Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["NumeroMaletas"])));
            //contrato.Precio = Convert.ToDecimal(Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Precio"])));
            //contrato.TipoEntrega = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["TipoEntrega"])));
            //contrato.Total_cnt = Convert.ToDecimal(Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Total_cnt"])));
            //contrato.Peso = Convert.ToDecimal(Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Peso"])));
            //contrato.DatosMaleta = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["DatosMaleta"])));
            //contrato.Descripcion = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Descripcion"])));
            //contrato.Gastos = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Gastos"])));
            //contrato.Observacion = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Observacion"])));
            //contrato.Cod_Estado = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Cod_Estado"])));
            new LNContrato().GuardarContrato(contrato);

            return RedirectToAction("Index");
        }

        public List<ENParametro> Parametro(string dominioid)
        {
            LNParametro lnparametro = new LNParametro();
            return lnparametro.ParametroListar(dominioid);
        }

        public ActionResult Seleccionar(string Cliente)
        {
            //ENCorreo correo = new ENCorreo();
            //string cliente = Convert.ToString(colleccion["Cliente"]);
            //ViewBag.Cliente = cliente.ToString();
            ////correo.IdProfesor = Convert.ToInt32(colleccion["idprofesor"]);
            ////correo.Correo = Convert.ToString(colleccion["correo"]);
            ////new LNCorreo().ActualizarCorreo(correo);
            //Valida si es una peticion Ajax
            //ViewBag.Cliente = Cliente.ToString();
            //if (Request.IsAjaxRequest())
            //    return PartialView();
            return RedirectToAction("Create", new { Cliente = Cliente });
        }

        //Detalle
        [OutputCache(Duration = 360, VaryByParam = "idContrato")]
        public ActionResult Detalle(int idContrato)
        {
            var contrato = new LNContrato().ContratoDetalle(idContrato);
            //Valida si es una peticion Ajax
            if (Request.IsAjaxRequest())
                return PartialView(contrato);
            return View(contrato);
        }


        public ActionResult Editar(int idContrato)
        {
            var contrato = new LNContrato().ContratoDetalle(idContrato);

            var lista  = new LNCliente().ClientesListarTotal();
            ViewBag.ListaCliente = new SelectList(lista, "ID", "Cliente", contrato.Cliente_ID);

            var listaRuta = Parametro(ENUMTabla.Ruta.ToString());
            ViewBag.Ruta = new SelectList(listaRuta, "Codigo", "Nombre", contrato.Cod_Ruta);
            
            var listaAerolinea = Parametro(ENUMTabla.Aeronilinea.ToString());
            ViewBag.Aerolinea = new SelectList(listaAerolinea, "Codigo", "Nombre",contrato.Cod_Aerolinea);
            
            var listaTipoEntrega = Parametro(ENUMTabla.TipoEntrega.ToString());
            ViewBag.TipoEntrega = new SelectList(listaTipoEntrega, "Codigo", "Nombre",contrato.TipoEntrega);
           
            var listaDatoMaletas = Parametro(ENUMTabla.DatosMaleta.ToString());
            ViewBag.DatoMaletas = new SelectList(listaDatoMaletas, "Codigo", "Nombre",contrato.DatosMaleta);            

            var listaEstado = Parametro(ENUMTabla.Estado.ToString());
            ViewBag.Estado       = new SelectList(listaEstado, "Codigo", "Nombre",contrato.Cod_Estado);

            //Valida si es una peticion Ajax
            if (Request.IsAjaxRequest())
                return PartialView(contrato);
            return View(contrato);
        }

        [HttpPost]
        public ActionResult Editar(
            FormCollection colleccion)
        {
            
            ENContrato contrato = new ENContrato();
            contrato.ID = Convert.ToInt32(Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["ID"])));
            contrato.Cliente_ID = Convert.ToInt32(Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Cliente_ID"])));
            contrato.Ruta = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Ruta"])));
            contrato.Aerolinea = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Aerolinea"])));
            contrato.FechaSalida = Convert.ToDateTime(colleccion["FechaSalida"]);
            contrato.FechaLlegada = Convert.ToDateTime(colleccion["FechaLlegada"]);
            contrato.Vuelo = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Vuelo"])));
            contrato.NumeroMaletas = Convert.ToInt32(Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["NumeroMaletas"])));
            contrato.Precio = Convert.ToDecimal(Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Precio"])));
            contrato.TipoEntrega = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["TipoEntrega"])));
            contrato.Total_cnt = Convert.ToDecimal(Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Total_cnt"])));
            contrato.Peso = Convert.ToDecimal(Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Peso"])));
            contrato.DatosMaleta = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["DatosMaleta"])));
            contrato.Descripcion = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Descripcion"])));
            contrato.Gastos = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Gastos"])));
            contrato.Observacion = (Sanitizer.GetSafeHtmlFragment(Convert.ToString(colleccion["Observacion"])));
            contrato.Cod_Estado =(Sanitizer.GetSafeHtmlFragment( Convert.ToString(colleccion["Cod_Estado"])));
            new  LNContrato().ActualizarContrato(contrato);
            return RedirectToAction("Index");
        }

        public ActionResult Eliminar()
        {
            if (Request.IsAjaxRequest())
                return PartialView();
            return View();
        }

        [HttpPost]
        public ActionResult Eliminar(int idContrato)
        {
            new LNContrato().EliminarContrato(idContrato);
            return RedirectToAction("Index");
        }
    }
}
